陣列是使用「參考資料類型」的物件,當宣告一個陣列時,該名稱紀錄的是記憶體的位址,實際陣列的內容值則是存放在記憶體中。
當我們將陣列A指定給陣列B之後,修改陣列A內容,實際B的內容也會隨之改變。
程式範例試做:
public class Alex0926_1{
public static void main (String[] args){
int[] A= {11,22,33};
int[] B= new int[3];
for( int i=0 ; i < A.length ; i++ );
System.out.printf("A[%d]= %d \t", i, A[i]);
System.out.println();
B=A;
for( int i=0 ; i < B.length ; i++ );
System.out.printf("B[%d]= %d \t", i, B[i]);
System.out.println();
A[2]=100;
System.out.println("B[2]=" + B[2] );
}
}
執行結果:
A[0]= 11 A[1]= 22 A[2]= 33
B[0]= 11 B[1]= 22 B[2]= 33
B[2]=100
以下有三種常見方式可以將陣列A個元素的內容指定給陣列B,也就是使陣列B有獨立的記憶體位址紀錄內容值。
(1)利用迴圈逐一指定元素內容
for(int i=0; i<A.length;i++ )
B[i]=A[i];
(2)使用系統物件裡的arrarcopy()方法,達到達到複製陣列內各元素的內容值的目的。
System.arraycopy(A, 0, B, 0, 3);
(3)使用陣列既有的clone()方法。比如要將陣列A元素複製到B陣列,程式可寫為:
B=A.clone();
程式範例試做:
public class Alex0926_2
public static void main(String[] args){
int[] A ={11,22,33,44,55};
int[] B = new int [A.length];
for( int i = 0 ; i < A.length; i++ )
B[i] = A[i];
int[] C = new int[A.length];
System.arraycopy(A, 0, C, 0, A.length);
int[] D;
D = A.clone();
}
}
不管事迴圈還是System類別的arraycopy()方法複製元素的內容,複製目的的陣列都必須先宣告且要大於來源陣列的元素數量,而使用clone()方法,則不需事先宣告元素數量。